package demo1;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;

public class TestHDFS {
    @Test
    public void test1() throws Exception{
        // 1、创建一个配置类，初始化参数
        Configuration conf = new Configuration();
        // 指明HDFS的位置(namenode)
        conf.set("fs.defaultFS","hdfs://hadoop10:9000");
        // 2、创建HDFS操作的工具类
        FileSystem fileSystem = FileSystem.get(conf);
        // 3、调用工具类的方法，完成上传操作    文件路径需要封装带Path对象中
        // hdfs dfs -put 本地路径 hdfs路径
        fileSystem.copyFromLocalFile(new Path("D:\\aaa"),new Path("/"));  // 将windows上的文件上传到hdfs上面
        // 4、释放资源
        fileSystem.close();
    }

    @Test
    public void test2() throws Exception{
        // 1、创建一个配置类，初始化参数
        Configuration conf = new Configuration();
        // 指明HDFS的位置(namenode)
        conf.set("fs.defaultFS","hdfs://hadoop10:9000");
        // 2、创建HDFS操作的工具类
        FileSystem fileSystem = FileSystem.get(conf);
        // 3、调用工具类的方法，完成上传操作    文件路径需要封装带Path对象中
        // hdfs dfs -get hdfs路径 本地路径
        fileSystem.copyToLocalFile(new Path("\\test1"),new Path("d:\\abc")); // 将hdfs上的文件下载到windows上面
        // 4、释放资源
        fileSystem.close();
    }

    @Test
    public void test3() throws Exception{
        // 1、创建一个配置类，初始化参数
        Configuration conf = new Configuration();
        // 指明HDFS的位置(namenode)
        conf.set("fs.defaultFS","hdfs://hadoop10:9000");
        // 2、创建HDFS操作的工具类
        FileSystem fileSystem = FileSystem.get(conf);
        // 3、调用工具类的方法，完成上传操作    文件路径需要封装带Path对象中
        fileSystem.mkdirs(new Path("/test3"));  // 创建文件夹
        // 4、释放资源
        fileSystem.close();
    }

    @Test
    public void test4() throws Exception{
        // 1、创建一个配置类，初始化参数
        Configuration conf = new Configuration();
        // 指明HDFS的位置(namenode)
        conf.set("fs.defaultFS","hdfs://hadoop10:9000");
        // 2、创建HDFS操作的工具类
        FileSystem fileSystem = FileSystem.get(conf);
        // 3、调用工具类的方法，完成上传操作    文件路径需要封装带Path对象中
        System.out.println(fileSystem.exists(new Path("/test3")));  // 判断文件是否存在
        // 4、释放资源
        fileSystem.close();
    }

    @Test
    public void test5() throws Exception{
        // 1、创建一个配置类，初始化参数
        Configuration conf = new Configuration();
        // 指明HDFS的位置(namenode)
        conf.set("fs.defaultFS","hdfs://hadoop10:9000");
        // 2、创建HDFS操作的工具类
        FileSystem fileSystem = FileSystem.get(conf);
        // 3、
        fileSystem.delete(new Path("/test3"),true);
        // 4、释放资源
        fileSystem.close();
    }

    @Test
    public void test6() throws Exception {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://hadoop10:9000");
        FileSystem fileSystem = FileSystem.get(conf);
        //hdfs dfs -ls /
        FileStatus[] listStatus = fileSystem.listStatus(new Path("/"));
        // 遍历集合
        for (FileStatus fileStatus : listStatus) {
            System.out.println(fileStatus.getPath() + "  " + fileStatus.getLen() + "  " + fileStatus.getModificationTime());
        }

        fileSystem.close();
    }
}
